package com.sort;

/**
 * @author zhengTao
 * @version 1.0
 * @description: 冒泡排序
 *               1.每一趟下来确定一个最大的数，放在数组最后面（每次都是两两比较，大的数放后面）
 *               2.一共需要排  （数组长度-1） 趟, 因为最后一趟只有一个数，后面都排好了，第一个数自然也就确定了
 *               3.每一次排序的数字从指针0.到 (数组长度-趟数)
 * @date 2022/9/18 14:01
 */
public class BubbleSort {
    public static void main(String[] args) {
        int[] nums=new int[]{2,5,3,7,9,6,1,8,4};
        bubbleSort(nums);
        for (int num : nums) {
            System.out.println(num);
        }
    }
    //冒泡排序
    private static void bubbleSort(int[] nums) {
        for (int i = 0; i < nums.length-1; i++) {    //排序的趟数，从0开始，到长度减2，一共n-1趟
            for (int j = 0; j < nums.length - 1 - i; j++) {     //每次排序的数字索引，从0至，数组长度-1减去tangshu
                swap(j,j+1,nums);
            }

        }
    }
    //交换数组的位置
    private static void swap(int index1, int index2, int[] nums) {
        if(nums[index1]>nums[index2]){
            int temp=nums[index1];
            nums[index1]=nums[index2];
            nums[index2]=temp;
        }
    }

    //冒泡排序优化
    //冒泡排序
    private static void bubbleSort1(int[] nums) {
        for (int i = 0; i < nums.length-1; i++) {    //排序的趟数，从0开始，到长度减2，一共n-1趟
            boolean flag=true;
            for (int j = 0; j < nums.length - 1 - i; j++) {     //每次排序的数字索引，从0至，数组长度-1减去tangshu
                if(nums[j]>nums[j+1]){
                    flag=false;
                    int temp=nums[j];
                    nums[j]=nums[j+1];
                    nums[j+1]=temp;
                }
            }
            //如果一趟下来，没有经过交换，则证明已经有序了，则不用后面交换了，优化点就在这里
            if (flag) {
                break;
            }

        }
    }

}
